/**
 * 简单事件总线实现
 */
import { ref, computed } from 'vue';

class EventBus {
  constructor() {
    this.events = {};
  }

  // 订阅事件
  on(eventName, callback) {
    if (!this.events[eventName]) {
      this.events[eventName] = [];
    }
    this.events[eventName].push(callback);
  }

  // 取消订阅
  off(eventName, callback) {
    if (!this.events[eventName]) return;
    
    if (!callback) {
      // 如果没有提供回调函数，则删除该事件的所有监听器
      delete this.events[eventName];
    } else {
      // 否则只删除特定的回调函数
      this.events[eventName] = this.events[eventName].filter(
        cb => cb !== callback
      );
    }
  }

  // 触发事件
  emit(eventName, data) {
    if (!this.events[eventName]) return;
    
    this.events[eventName].forEach(callback => {
      callback(data);
    });
  }
}

// 创建并导出事件总线实例
export const eventBus = new EventBus();

// 模型控制状态
export const modelStates = {
  highPrecision: ref(true),  // 高精模型状态
  oblique: ref(true),        // 倾斜模型状态
  
  // 计算属性：模型按钮状态
  highPrecisionBtnActive: computed(() => !modelStates.highPrecision.value),
  obliqueBtnActive: computed(() => !modelStates.oblique.value),
}; 